package sistema.contexto.avaliacao;

import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import util.CalendarUtil;

/**
 * Classe que representa uma Per�odo que que problemas podem ser submetidos
 * @author Vin�cius Ferraz Campos, vinicius.ferraz_at_gmail.com
 * @author Thiago Emmanuel Pereira da Cunha Silva, thiago.manel@gmail.com
 * @author Joao Arthur Brunet Monteiro, joaoarthurbm@gmail.com
 *
 */
public class Avaliacao {
	
	private List<String> problemas;
	
	private Calendar inicio;
	private Calendar fim;

	private String descricao;

	private String idAvaliacao;
	private String idTurma;
	
	/**
	 * Construtor
	 * @param idAvaliacao identificador da nova Avaliacao
	 * @param idTurma Identificador da Turma a qual ela � aplicada
 	 * @param dateInicio Data de inicio seu per�odo ativo
	 * @param dateFim Data final seu per�odo ativo
	 * @param descricao Descricao da Avalia��o
	 */
	public Avaliacao(String idAvaliacao, String idTurma,  Calendar dateInicio, Calendar dateFim, String descricao) {
		problemas = new LinkedList<String>();
		this.idTurma = idTurma;
		this.idAvaliacao = idAvaliacao;
		this.inicio = dateInicio;
		this.fim = dateFim;
		this.descricao = descricao;
	}
	
	/**
	 * Adiciona um novo problema a Avaliacao
	 * @param idProblema identificador do Problema
	 */
	public void adicionaProblema(String idProblema) {
		problemas.add(idProblema);
	}
	
	/**
	 * Retorna se a Avaliacao esta ativa
	 * @return true se a data atual do sistema estiver entra a data inicial e final, false caso contratio
	 */
	public boolean estaAtiva() {
		return CalendarUtil.estaEntreDatas(Calendar.getInstance().getTime(), inicio, fim);
	}

	/**
	 * Retorna a lista de Identificadores que fazem parte desta Avaliacao
	 * @return Lista de Identificadores que fazem parte desta Avaliacao
	 */
	public List<String> getProblemas() {
		return problemas;
	}

	/**
	 * Retorna a descricao da Avaliacao
	 * @return Descricao da Avaliacao
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * Retorna o idenfiticador da Avaliacao
	 * @return Idenfiticador da Avaliacao
	 */
	public String getIdAvaliacao() {
		return idAvaliacao;
	}

	/**
	 * Retorna o identificador da Turma a qual a Avaliacao � aplicada
	 * @return
	 */
	public String getIdTurma() {
		return idTurma;
	}
	
	public String toString() {
		return idAvaliacao+ " - "+idTurma +" - "+ inicio.getTime() +" - " + fim.getTime()+ " - "+ descricao;
	}
}
